package com.cg.design.depthdesign.factorymethod;

import com.cg.design.depthdesign.factorymethod.factory.Dialog;
import com.cg.design.depthdesign.factorymethod.factory.HtmlDialog;
import com.cg.design.depthdesign.factorymethod.factory.WindowsDialog;

/**
 * 创建型模式：FactoryMethod工厂方法测试类
 * <p>
 * 工厂方法模式是一种创建型设计模式，其在父类中提供一个创建对象的方法，允许子类决定实例化对象的类型。
 *
 * @program: LeetCode->FactoryMethodTest
 * @author: cg
 * @create: 2022-04-05 23:29
 **/
public class FactoryMethodTest {

    private static Dialog dialog;

    public static void main(String[] args) {
        configure();
        runBusinessLogic();
    }

    /**
     * 根据配置环境选择具体的创建者
     */
    static void configure() {
        if (System.getProperty("os.name").equals("Windows 10")) {
            dialog = new WindowsDialog();
        } else {
            dialog = new HtmlDialog();
        }
    }

    /**
     * 所有的客户端代码都应该通过抽象接口与工厂和产品一起工作。
     * <p>
     * 这样，它就不关心它与哪家工厂合作，也不关心它返回的是哪种产品。
     */
    static void runBusinessLogic() {
        dialog.renderWindow();
    }

}
